Может, все дело в переменных? Попробуй в настройках поставить галочку копировать переменные вместе с триггерами или, если не сработает для твоего глючного редактора, попробуй скопировать переменные вручную перед триггерами.
Попробуйте перезагрузить компьютер, при загрузке компьютера нажать F8, чтобы вызвать меню выбора режимов загрузки ОС и выбрать "Загрузка последней удачной конфигурации (с работоспособными параметрами)". У меня сегодня тоже редактор стал вылетать при сохранении нестандартных объектов. Помогла перезагрузка с "загрузкой последней удачной конфигурации (с работоспособными параметрами)".
Потыкав разные кнопки во время F8 и ничего не нашёл. Там можно выбрать два пункта, которые просто загружают комп. К слову, windows 10
Да ладна, всё забейте. Как всегда, всё решилось само собой и методом тыка
Вряд ли дело в ваших текстурах, скорее всего такова механика отображения миникарты. Но есть как минимум два способа заменить миникарту заранее заготовленным изображением: импорт файла war3mapMap.blp или новая функция BlzChangeMinimapTerrainTex (только для 1.31+).
Если у юнита есть способность рудника, то иконку не скрыть через РО. Есть функция альтернативной иконки на мини-карте. Она может быть только одна в карте. Импортируешь иконку с альфа-каналом (прозрачную):
SetAltMinimapIcon("war3mapImported\\InvisibleIcon.blp") -- .dds не видит
UnitSetUsesAltIcon(unit, true) -- принимает только созданного на карте юнита, не айди юнита из РО
-- всех юнитов можно перебрать через счетчик, например
Есть еще несколько баг репортов от игроков на форуме близзов о том, что этот параметр в РО не работает на версиях 1.32+:
способность никак
вместо способности должна быть покупка юнита
при покупке юнита смотрим владельца купленного юнита
это и будет игрок нажавший на иконку
после этого выбираем таверну и удаляем купленного юнита
Смотря что нужно, если ЛКМ нужно отслеживать только для выбора юнитов, указания цели способностей или установки точки сбора, то и стандартные функции 1.26 сгодятся, а если ещё и просто сам факт щёлкания в пустоту, то либо мемхак, либо новый патч. как уже заметили выше
Происходящее здесь напомнило мне один случай из моего далекого прошлого. В те времена я еще только начинал осваивать редактор. Одна из тем, которая меня заинтересовала и по которой мне не удалось найти достаточно полной информации - утечки. Тогда я пошел на один форум и задал простой вопрос о том, как определить наличие и степень серьезности утечек в карте, не перебирая весь код. В результате я получил тонну флуда и "ответ от профи", с которым все в итоге согласились - фрагмент кода с ценным указанием "если это число растет быстро - утечек много, если медленно - мало или нет вовсе". Код представлял из себя таймер с малым периодом, который создавал объект, брал его хендл, писал в чат и удалял объект, но был один нюанс - создаваемый объект утекал на каждой итерации таймера.
У тебя ошибка, фукнкцию которую ты хочешь вызвать должна находится выше места вызова.
Unholy_Shield_End должна быть описана выше чем Sosdanie_Shita_Act1
Ну и вовсе, тебе нужен не хендл ид юнита а таймера,ибо сохранять ты данные должен на таймер а не на юнита, когда таймер истечет и вызовет функцию, внутри этой функции у тебя будет работать функция GetExpiredTimer() - которая вернет тот таймер, который запустил эту функцию, это единственный обьект связывающий твой триггер и функцию Unholy_Shield_End, и разумеется GetTriggerUnit() - не будет работать в потоке таймера, т.к это функция реакция на событие триггера. Ты походу копипастишь код совершенно не вникая в принципы его работы.
Ну если у тебя через локалку что-то неправильно иногда работает, значит просто у тебя где-то ошибка (или ты вообще делаешь это не так).
Для того что бы работать парой таймер+юнит впринципе то больше ничего и не нужно - таймер и сам юнит. Но если у тебя должно запускаться параллельно несколько точно таких же таймеров, то тут может подойти массив таймеров (и массив юнитов). При срабатывании одного из таймеров ты можешь ссылаться на юнита записанного под тем же индексом массива ( unit[X] и timer[X] соответственно).
А ещё в триггер можно добавлять события на срабатывания новых таймеров.
Это баг варика. Когда ты используешь несколько диалогов и показываешь их подряд, название Title надо каждый раз заново создавать. Если бы у тебя был один диалог и ты бы его показывал несколько раз подряд - заголовок сохраниться.
Могу посоветовать при пересоздании запускать триггер dialog повторно.
Постоянный харас хумана. Для начала проверить, есть ли у него экспанд. Если он собирается его основать - пытаться всячески сносить. Пытаться мешать крипингу (создавать скелетов жезлом, убивать побитых пехотинцев, ополчение коилом). Если хуману все же удалось построить экспанд, необходимо переходить в постоянную осаду, которая поддерживается с помощью пауков. Быстрый подъем до Т2 (Чертоги мертвых), после чего строится бойня и Лич, как второй герой (ДК - первый герой, кстати). При осаде стараться убить как можно больше пехотинцев. От экспанда лучше не отступать, так как хуман должен нести постоянные потери. При возможности убивать героя (но не сильно акцентировать на нем внимание; коил + нова, если герой хумана додыхает). Постоянно поттягивать статуи к экспанду и перебираться та Т3 (Темная Цитадель), после чего провести улучшения для сфинксов. Так как хуманы любят башни, необходимо статуи превратить в сфинксов и вынести ему башни (причем нужно каждого превратить отдельно и из следующей статуи вытащить всю ману; делать поочередно, не торопясь). Сплеш от ударов сфинксов снесет всех рабочих, которые попытаются реанимировать башни. После такого для хуманов игра завершается поражением. Главное все сделать правильно и последовательно.
Про выключение ручных сейвов ничего не могу сказать, а второй пункт решается созданием кастомного меню выхода через диалог, где ты сохраняешь игру через код. Только продолжать надо будет всё равно через загрузку игры.
мультиборд в карте на ГУИ? в гуи функциях внутри часто необнуляются локальные переменные объектов
если код то мб не используется MultiboardReleaseItem и итемы остаются висеть
а) Создай 2 переменные-массива по типу "боевая единица" (массив - чтобы для каждого игрока, мы ведь за мультиплеер трем, прально?), назови типа MyChampion и MyChampionDummy.
б) подготовь невидимого героя-пустышку с нужной тебе иконкой, убери ману, если у чемпиона ее нет. Убери ему радиус обзора, убери галочки типа "отмечать на мини-карте" - остальные - опционально.
В дальнейшем мы будем синхронизировать пустышку и реального чемпиона, создавая видимость одной боевой единицы.
Итак, наш первый триггер:
в) Отследи первое появление чемпиона, когда это случится - создай для игрока героя-пустышку. Соответственно сделай MyChampion [number of (Owner of trained unit)]= last trained unit, следующей строчкой создай того самого героя-пустышку для (owner of trained unit) и сделай MyChampionDummy = last created unit. Теперь мы прочно связали этих чуваков. Этот же триггер запускает остальные.
г) Отслеживание здоровья. Сделай изначально выключенный цикличный триггер, там, каждые 0.3 секунды. Триггер запускается пунктом в). Каждые 0.3 секунды меняй здоровье героя (чья икона висит, надо чтобы она соответствовала, прально?) в % на здоровье самого чемпиона.
д) пропищи событие, мол, если выбирает игрок своего героя (кликая на иконку) выбирается чемпион
е) убивай героя вместе с чемпионом
ж) отключай триггеры с проверкой и выбором, пока чемпион мертв
з) не забывай обновлять переменную чемпиона с каждым новым чемпионом.
xgm.guru/p/wc3/articles Попробуй сделать что-нибудь сам. Посмотри, что вообще там можно сделать. Если ты просишь сделать за тебе двухстрочный триггер - забей.
должен сразу предупредить что делать за тебя никто не будет
теперь по твоим вопросам
чтобы нельзя было кликать скрываешь, даёшь москиты, делаешь видимым
действие проиграть звук и указываешь твою фразу
выбираем всех подходящих(враги,живые) юнитов в радиусе от точки каста и создаём по дамми юниту(юнит без модели, без атаки, с москитами, с нужной способность, время жизни юнита 1 сек) для каждого подходящего юнита приказывая дамми юниту применить нужную способность в подходящего юнита
таким образом каждый дамми юнит применит нужную способность (в твоём случае корни) в 1 подходящего юнита для которого он и был создан а потом исчезнет
function IsUnitBack takes unit uF, unit uWhichBack returns boolean
real r1 = bj_RADTODEG * Atan2(GetUnitY(uWhichBack) - GetUnitY(uF), GetUnitX(uWhichBack) - GetUnitX(uF)) + 360.
real r2 = GetUnitFacing(uWhichBack) + 360.
if GetUnitY(uWhichBack) < GetUnitY(uF) then
set r1 = r1 + 360.
endif
return (r1<=(r2+45.) and r1>=(r2-45.))
endfunction
Юзать структуры, свои собственные системы хранения данных.
Если вы только решили слезть с гуи+ вейты на jass, то вам рано думать о таком.
Таймер + хештаблицы в помощь, в статьях есть много информации на эту тему.
Что вам еще непонятно? ImbaStyle, что есть TriggerSleepActions и timer вам известно?
Нельзя просто использовать таймер вместо вейта посередине триггера (гуишный вейт именно так и работает - запускает таймер и проверяет циклом каждые 0.1 сек пока он не пройдет).
Но если так уж нужно узнать истек ли таймер:
Real comparison - Обратный отсчет - Remaining time for timer (оставшееся время таймера)
Уже давно забыл что такое варкрафт и как выглядят тригерры но попробую объяснить по кривому)
Через событие юнит атакован выставляй шанс на то что даммик бафнет героя дамми бафом который даёт лайф стил и атак спид...
Как-то так)
Более подробно и правильно объяснить не смогу т.к ничерта не помню)
Неуязвимость проверяют через даммика с атакой, через приказ, сможет ли атаковать или нет, просто проверка выполнения приказа. Так же пытаются нанести урон и смотрят сколько он отнял здоровья, так можно и определить неуязвимость и вычислить резист юнита к конкретному типу урона.
Так ведь в редакторе объектов есть строчка "Пути - требование к расположению". Там можно просто поставить галочку "Неиспорченный" и построить это здание на порченной земле будет уже нельзя.
Эмм что за ерунда, сократил код, убрав всё лишнее, но утечки все равно остаются, по 1.5 - 2 хэндла за каждое нанесение урона (тип хэндла не знаю как посмотреть). Когда триггер отключаешь, то всё нормально.
Сокращенный код
function SDMSCreateTextTag takes nothing returns nothing
local unit u=GetTriggerUnit()
local unit s=GetEventDamageSource()
local integer i=GetConvertedPlayerId(GetOwningPlayer(u))
local texttag tt=CreateTextTag()
local real dmg=GetEventDamage()
if ( dmg > 1.00 ) and ( dmg < 9999.00 ) then
if GetPlayerId(GetOwningPlayer(u))==12 then
call SetTextTagText(tt, "|cff9db9eb-"+I2S(R2I(dmg))+"|r", 0.023)
else
call SetTextTagText(tt, "|cffffa500-"+I2S(R2I(dmg))+"|r", 0.023)
endif
call SetTextTagPosUnit(tt, u, 0)
call SetTextTagColor(tt, 255, 255, 255, 255)
call SetTextTagVelocity(tt, 0.05325*Cos(90 * bj_DEGTORAD), 0.05325*Sin(90 * bj_DEGTORAD))
call SetTextTagPermanent(tt, false)
call SetTextTagLifespan(tt, 1.0)
call SetTextTagFadepoint(tt, 0.0)
endif
call PolledWait(2.0)
call DestroyTextTag(tt)
set u=null
set s=null
set i=0
set dmg=0
set tt=null
endfunction
function SDMSTriggerRegisterUnitDamaged takes nothing returns nothing
call TriggerRegisterUnitEvent(udg_SDMStrigger,GetEnteringUnit(),EVENT_UNIT_DAMAGED)
endfunction
function theSDMSTriggerActions takes nothing returns nothing
local trigger UnitEnter=CreateTrigger()
call TriggerRegisterEnterRectSimple(UnitEnter, gg_rct_Arena)
call TriggerAddAction(UnitEnter,function SDMSTriggerRegisterUnitDamaged)
set UnitEnter=null
endfunction
function InitTrig_the_SDMS_Trigger takes nothing returns nothing
local trigger tr=CreateTrigger()
set udg_SDMStrigger=CreateTrigger()//Тут также меняется название глобальной переменной типа триггер.
call TriggerAddAction(udg_SDMStrigger,function SDMSCreateTextTag)
call TriggerRegisterTimerEventSingle(tr,0.0)
call TriggerAddAction(tr,function theSDMSTriggerActions)
set tr=null
endfunction
Wait вызывает утечки ((
Пришлось делать через таймер
сделать базу даных по названию...
строка[1] = "пехотинец"
строка[2] = "паладин"
тип юнита[1] = пехотинец
тип юнита[2] = паладин
цыкл
если введенная строка == строка[А]
создать юнита тип юнита[А]
Это конкретно по ошибке... а вообще - не надо смотреть видео от этого человека, он тебя плохому научит... правда. А другим потом придётся тебя переучивать, если ты сам это дело не забросишь
Значит 3 раза понижали. Опыт может снятся только в одном из этих случаев:
ресурс снят с публикации который ранее был опубликован
проект снижен в уровне, который ранее был большего уровня
удален опубликованный комментарий / пост на форуме
ты написал сообщение в оффтопку на форуме (за каждый пост -1 опыта)
ну и самый редкий вариант ,если какой то модератор пользуюсь служебным положением заабузит админку и начислит н-ое кол-во опыта определенному юзера, мы это спалим и снимем опыт назад.
Значит 3 раза понижали. Опыт может снятся только в одном из этих случаев:
ресурс снят с публикации который ранее был опубликован
проект снижен в уровне, который ранее был большего уровня
удален опубликованный комментарий / пост на форуме
ты написал сообщение в оффтопку на форуме (за каждый пост -1 опыта)
ну и самый редкий вариант ,если какой то модератор пользуюсь служебным положением заабузит админку и начислит н-ое кол-во опыта определенному юзера, мы это спалим и снимем опыт назад.
Уровень = Уровню героя. Характеристики = Характеристикам героя. Цикл 6-разовый на каждый слот дающий предмет герою. Уровни способностей равные уровню способностей героя. Героя, в смысле твоего героя. Ну еще создать юнита типа твоего героя. Что-то еще? Если он где-то в переменных для пассивок, то с ними тоже по колдовать и все.
Будет только одна проблема, если ты книги атаки на его юзал то их никак не засеч без геморроя. А так все в виде целочисленных на твоем герое записано.
на сколько я понял проблема в том что после смерти способность не удаляется
тогда нужен триггер с событием юнит умирает
и если юнит герой то удалять эту способность Melissa:
Ну и если вдруг скилл используют одновременно или почти одновременно десятки юнитов - то не у всех панцирь будет корректно удаляться.
Ну хз, ручками удали скилл слк или тхт, хз как там у тебя, после деоптимизации карты (снятия защиты) часто бывают баги с обьектными данными, попробуйте другой деоптимизатор, или правьте ручками...
Делай call UnitMakeAbilityPermanent(u, true,'A000') ) .
Где вместо A000 твоя абилка.
Если абила спеллбучная, то все спеллбуки тоже надо вживлять.
Перманент-абилы не пропадают после морфа и анморфа. Просто добавленные - пропадают.
Ну что пацаны Datamanager ?
Дам подсказку, смотреть на систему ливов и сыгранный игр, там переменная сама инкрементируется за каждый запуск игры, и сама подгружается, но надо включить локальные файлы и сделать привязку к нику и зашифровать данные, ибо иначе тут всё в открытом виде, можно сбрасывать значение
Утечка - это когда не удаляются ненужные объекты. Здесь регион нельзя удалять, потому что без него событие не будет работать. Но если у вас много таких событий, то лучше использовать один регион для всех событий, при условии, что размеры региона не будут изменяться в процессе игры, потому что это может нарушить работу других событий, привязанных к данному региону.
А функция TriggerRegisterEnterRectSimple в теории не утечна, но на практике может утекать, например, если в потоке триггера будет вызвано её уничтожение RemoveRegion(GetTriggeringRegion()).
» WarCraft 3 / вылетает карта кампании
» WarCraft 3 / Вопрос по загрузочному экрану
» WarCraft 3 / Миникарта
» IrInA Host Bot / Проблема вылетов из карты
» WarCraft 3 / Как создать невидимую способность?
» WarCraft 3 / Отследить ЛКМ
» WarCraft 3 / Таймер
» WarCraft 3 / Помощь в начале.
» WarCraft 3 / Нужна помощь с триггером
» WarCraft 3 / Блок атаки
» WarCraft 3 / Работает ли GetItemTypeId
» WarCraft 3 / Таймер вместо вейта
» WarCraft 3 / Контратака
» WarCraft 3 / Отлов точки приказа постройки
» WarCraft 3 / Строка и переменная тип юнита
» WarCraft 3 / Команда для игрока
» WarCraft 3 / Редактирование текстур
» Администрация XGM / как получить уровень 1
» Администрация XGM / как получить мне уровень в этом сайте
» WarCraft 3 / Собственные характеристики для героя
» WarCraft 3 / Не удаляется способность
» WarCraft 3 / Помогите разобраться с опытом
» WarCraft 3 / Утекает ли область?
» WarCraft 3 / Мульти атака одного юнита.